package org.wdcode.common.codec;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.wdcode.common.constants.EncodingConstants;
import org.wdcode.common.exception.CustomRuntimeException;
import org.wdcode.common.util.StringUtil;

/**
 * 编码类
 * @author WD
 * @since JDK6
 * @version 1.0 2010-06-22
 */
public final class Encode {
	/**
	 * 字节码转换成16进制字符串
	 * @param b 要编码的字节数组
	 * @return 转换后的字符串
	 */
	public final static String hex(byte[] b) {
		return Hex.encodeHexString(b);
	}

	/**
	 * 字节码转换成16进制字符串
	 * @param s 转换的字符串
	 * @return 转换后的字符串
	 */
	public final static String hex(String s) {
		return hex(StringUtil.toBytes(s));
	}

	/**
	 * Base64编码
	 * @param s 要编码的字符串
	 * @return 编码后字符串
	 */
	public final static String base64(String s) {
		return base64(StringUtil.toBytes(s));
	}

	/**
	 * Base64编码
	 * @param b 要编码的字节数组
	 * @return 编码后字符串
	 */
	public final static String base64(byte[] b) {
		return Base64.encodeBase64String(b);
	}

	/**
	 * url编码
	 * @param url 要编码的URL
	 * @return 编码后字符串
	 */
	public final static String url(String url) {
		return url(url, EncodingConstants.UTF_8);
	}

	/**
	 * url编码
	 * @param url 要编码的URL
	 * @param encoding 编码
	 * @return 编码后字符串
	 */
	public final static String url(String url, String encoding) {
		try {
			return URLCodecFactory.getURLCodec().encode(url, encoding);
		} catch (Exception e) {
			throw new CustomRuntimeException(e);
		}
	}
}
